package org.ym.tools;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author ym
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class FileTool {
    /**
     * 获取不包含文件类型得路径名称
     * @param fileFullPath 文件全路径名称
     * @return 不包含文件类型得路径名称
     */
    public static String getStrWithoutExt(String fileFullPath){
        if(StringUtils.isBlank(fileFullPath)){
            return "";
        }
        int index = fileFullPath.lastIndexOf(StringPool.DOT);
        if(index == -1){
            return fileFullPath;
        }
        return fileFullPath.substring(0,index);
    }

    /**
     * 判断文件是否被占用
     * @return true：占用 / false：未占用
     */
    public static boolean isFileInOccupied(Path filePath){
        boolean isOccupied = false;
        try{
            if(filePath.toFile().exists()) {
                filePath.toFile().renameTo(filePath.toFile());
                isOccupied = true;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return isOccupied;
    }

    /**
     * 是否有富裕空间存储指定大小文件，不压缩判断
     * @param workPath 文件夹目录
     * @param fileByteSize 文件大小，byte
     * @return true/false
     */
    public static boolean isHasRichSpaceWithNoCompress(String workPath,long fileByteSize){
        return Paths.get(workPath).toFile().getUsableSpace() > fileByteSize;
    }

    /**
     * 是否有富裕空间存储指定大小文件，压缩判断(按照文件两倍大小判断)
     * @param workPath 文件夹目录
     * @param fileByteSize 文件大小，byte
     * @return true/false
     */
    public static boolean isHasRichSpaceWithCompress(String workPath,long fileByteSize){
        return Paths.get(workPath).toFile().getUsableSpace() > (fileByteSize * 2);
    }

    /**
     * 删除文件
     * @param filePath
     * @return
     */
    public static boolean deleteFile(Path filePath){
        if(filePath != null && filePath.toFile().exists()){
            try {
                FileUtils.forceDelete(filePath.toFile());
                return true;
            } catch (IOException e) {
                return false;
            }
        }
        return false;
    }
    /**
     * 创建文件
     * @param filePath 文件路径
     * @throws IOException
     */
    public static void createFile(Path filePath) throws IOException {
        if(filePath.toFile().exists()){
            return;
        }
        createDirectory(filePath.getParent());
        boolean result = filePath.toFile().createNewFile();
        if(!result) {
            System.out.println("创建失败:" + filePath.toString());
        }
    }
    /**
     * 创建文件
     * @param filePath 文件路径
     * @throws IOException
     */
    public static void createDirectory(Path filePath) throws IOException {
        if(filePath.toFile().exists()){
            return;
        }
        boolean result = filePath.toFile().mkdirs();
        if(!result) {
            System.out.println("创建失败:" + filePath.toString());
        }
    }
}
